inputmaszk = function(mod, mezo){
//a maszk paraméterben érkező beviteli maszkot automatikusan hozzáadja a begépelt szöveghez és nem engedi felülírni
	this.mezo = mezo;
	this.reverse = false;	//hátulról illesztjük a maszkot vagy előről

	if(Object.isFunction(mod)){	//regexpet kaptunk első paraméterként
		this.maszk = mod;
		Event.observe(mezo, 'input', this.regexp.changer.bindAsEventListener(this));
		}
	else{
		switch(mod){
			case 'osszeg':
				this.maszk = '### ### ###,##';
				this.reverse = true;
				Event.observe(mezo, 'input', this.osszeg.changer.bindAsEventListener(this));
				break;
			case 'osszegEgesz':
				this.maszk = '### ### ### ###';
				Event.observe(mezo, 'input', this.osszeg.changer.bindAsEventListener(this));
				break;
			case 'datum':
				this.maszk = '####-##-##';
				Event.observe(mezo, 'input', this.datum.changer.bindAsEventListener(this));
				Event.observe(mezo, 'blur', this.datum.changeAfterBlur.bindAsEventListener(this));
				break;
			case 'datumido':
				this.maszk = '####-##-## ##:##:##';
				Event.observe(mezo, 'input', this.datumido.changer.bindAsEventListener(this));
				Event.observe(mezo, 'blur', this.datumido.changeAfterBlur.bindAsEventListener(this));
				break;			
			case 'telefon':
				this.maszk = '##/##-##-###';
				Event.observe(mezo, 'input', this.telefon.changer.bindAsEventListener(this));
				break;
			default:
				this.maszk = '';	//ez letilt mindenféle bevitelt azokra az esetekre amikor nem létező móddal hívjuk meg az ojjektumot
			}
		//adjunk értéket az input mező maxlength tulajdonsaganak
		mezo.maxLength = this.maszk.length;
		//a fixkarakter tömbben vannak azok az indexek ahol a fix karakter szerepel a maszkban
		this.fixkarakter = new Array();
		for(var i=0; i<this.maszk.length; i++)
			if(this.maszk.charAt(i) != '#')
				this.fixkarakter.push(i);
		}
	}//inputmaszk

inputmaszk.prototype.osszeg = {}

inputmaszk.prototype.osszeg.changer = function(){
	//amikor változtatjuk a bevitt értéket akkor frissíteni kell az input mező tartalmát
	var removeRegex = this.maszk.search(/,/) == -1 ? /\D/ : /[^\d,]/;	//eltávolítandó karakterek
	var maszkoltErtek = '';
	var pos = 0;
	var o = this;
	
	//gyorsbillenytűk átalakítás, és a többi nem számos karakter kiszűrése
	this.mezo.value.toArray().each(function(karakter){
		maszkoltErtek += o.osszeg.gyorsMod(karakter);
		if(karakter.search(removeRegex) == -1)
			maszkoltErtek += karakter.replace(removeRegex, '');
		});

	//a megszűrt értek stringbe beszúrjuk a maszk elválasztókat
	//var maszk = this.reverse ? $A(o.maszk).reverse() : o.maszk;
	this.fixkarakter.each(function(i, index){
		if(i < maszkoltErtek.length){
			pos = maszkoltErtek.length-i;
			maszkoltErtek = maszkoltErtek.substr(0,pos) + o.maszk[i] + maszkoltErtek.substr(pos,maszkoltErtek.length);
			}
		});
	this.mezo.value = maszkoltErtek;	
	}//osszeg.changer

inputmaszk.prototype.osszeg.gyorsMod = function(karakter){
	switch(karakter){
		case 's':
			karakter = '00';
			break;
		case 'e':
			karakter = '000';
			break;
		case 'm':
			karakter = '000000';
			break;
		default:
			karakter = '';
		}
	return(karakter);
	}//osszeg.gyorsMod

inputmaszk.prototype.datum = {}

inputmaszk.prototype.datum.changer = function(){
	//amikor változtatjuk a bevitt értéket akkor frissíteni kell az input mező tartalmát
	var maszkoltErtek = '';
	var pos = 0;
	var maszkolni = true;
	//todo: gyorsbillenytűk átalakítás, és a többi nem szám karakter kiszűrése
	this.mezo.value.toArray().each(function(karakter){
		if(karakter == '+'){		//+ jel van benne, a changeAfterBlur elvégzi a szükséges átalakítást
			maszkoltErtek = '+';
			maszkolni = false;
			}
		else if(karakter.search(/-/) != -1){		//kötőjel van benne, a changeAfterBlur elvégzi a szükséges átalakítást
			maszkoltErtek += karakter;
			maszkolni = false;
			}
		else if(karakter.search(/\D/) == -1){
			maszkoltErtek += karakter.replace(/\D/, '');
			}
		});
	if(maszkolni){
		var o = this;
		//a megszűrt ertek stringbe beszúrjuk a maszk elválasztókat
		this.fixkarakter.each(function(i, index){
			if(i < maszkoltErtek.length){
				maszkoltErtek = maszkoltErtek.substr(0,i) + o.maszk[i] + maszkoltErtek.substr(i,maszkoltErtek.length);
				}
			});
		}
	this.mezo.value = maszkoltErtek;
	}//datum.changer

inputmaszk.prototype.datum.changeAfterBlur = function(){
	var v = this.mezo.value;
	if(v.search(/\+/) != -1 || v == '')			//+ jellel kezdődik, azaz ma + x nap vagy üres
		this.mezo.value = this.datum.changePlus(v);
	else if(0 < v && v <= 31)						//a hónap x.edik napja
		this.mezo.value = this.datum.changeNum(v);
	else if(v.search(/-/) != -1)		//kötőjel van benne
		this.mezo.value = this.datum.changeMinus(v);
	}//datum.changeAfterBlur

inputmaszk.prototype.datum.changePlus = function(ertek){
	//a dátum +-szal kezdődik azaz ma +x napra kell módosítani
	ertek = parseInt(ertek.replace(/\+/, ''));
	return(this.getDatum(ertek));
	}//datum.changePlus

inputmaszk.prototype.datum.changeNum = function(ertek){
	//a dátum egy 31-nél kisebb szám, azaz adott hónap x-edik napjává kell alakítani
	//február 31-ét március 2-vé alakítja
	ertek = this.changePlus((ertek-new Date().getDate()).toString());
	return(ertek);
	}//datum.changeNum
	
inputmaszk.prototype.datum.changeMinus = function(ertek){
	//a dátumban vannak kötőjel(ek)
	if(ertek.length != 10){				//nem teljes dátummal van dolgunk
		if(ertek.match(/-/g).length == 1){	//egy kötőjel van benne, hónap nap adatot kaptunk
			var ev = new Date().getFullYear();
			var ho = this.getHo(ertek.split('-')[0]);
			var nap = this.getNap(ertek.split('-')[1]);
			ertek = ev + '-' + ho + '-' + nap;
			}
		else if(ertek.match(/-/g).length == 2){	//két kötőjelünk van, év, hó nap
			var ev = (ertek.split('-')[0].length == 2) ? '20' + ertek.split('-')[0] : '200' + ertek.split('-')[0];
			var ho = this.getHo(ertek.split('-')[1]);
			var nap = this.getNap(ertek.split('-')[2]);
			ertek = ev + '-' + ho + '-' + nap;
			}
		else										//több mint két kötőjel van benne
			ertek = this.getDatum();
		}
	return(ertek);
	}//datum.changeMinus
	
inputmaszk.prototype.datum.getDatum = function(napelteres){
	//a dátum eeee-hh-nn formában
	napelteres = napelteres ? napelteres : 0;
	var ma = new Date();
	ma = new Date(ma.getFullYear() + ',' + parseInt(ma.getMonth()+1) + ',' + parseInt(ma.getDate()+napelteres));
	var ho = this.getHo(parseInt(ma.getMonth()+1));
	var nap = this.getNap(ma.getDate());
	return(ma.getFullYear() + '-' + ho + '-' + nap);
	}//datum.getDatum
	
inputmaszk.prototype.datum.getHo = function(ho){
	//hónap két karakteren
	return(ho < 10 ? '0' + ho : (ho < 13 ? ho : 12));
	}//datum.getHo

inputmaszk.prototype.datum.getNap = function(nap){
	//ap két karakteren
	return(nap < 10 ? '0' + nap : (nap < 32 ? nap : 30));
	}//datum.getHo
	
inputmaszk.prototype.telefon = {}

inputmaszk.prototype.telefon.changer = function(){
	var maszkoltErtek = '';
	this.mezo.value.toArray().each(function(karakter){
		if(karakter.search(/\D/) == -1)
			maszkoltErtek += karakter.replace(/\D/, '');
		});
	var o = this;
	//a megszűrt ertek stringbe beszúrjuk a maszk elválasztókat
	this.fixkarakter.each(function(i, index){
		if(i < maszkoltErtek.length){
			maszkoltErtek = maszkoltErtek.substr(0,i) + o.maszk[i] + maszkoltErtek.substr(i,maszkoltErtek.length);
			}
		});
	this.mezo.value = maszkoltErtek;
	}//telefon.changer

inputmaszk.prototype.regexp = {}

inputmaszk.prototype.regexp.changer = function(){
	var maszkoltErtek = '';
	var o = this;
	this.mezo.value.toArray().each(function(karakter){
		if(karakter.search(o.maszk) != -1)
			maszkoltErtek += karakter.replace(o.maszk, '');
		});
	this.mezo.value = maszkoltErtek;
	}//regexp.changer


//*********************************************

//prototype függés!

/*használat:
document.observe('dom:loaded', function(){
	new inputmaszk('osszegEgesz', $('osszeg'));
	new inputmaszk('datum', $('BizonylatokDatum'));
	});
						*/
